package com.tedu.api.thread;

import org.junit.Test;

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

/**
 *
 */
public class LambdaDemo {
    @Test
    public void testList() {
        //List集合：保存元素
        List<String> list = new ArrayList<>();
        list.add("白洋淀");
        list.add("正定古城");
        list.add("河头老街");
        list.add("白石山");
        //集合3种遍历方式：普通for、增强for、forEach方法
        for (String str : list) {
            System.out.println("增强for：" + str);
        }
        //支持forEach方法：遍历集合元素
        //Consumer接口针对List集合提供接口：功能获取List集合元素
        //accept（）获取list集合所有元素
        list.forEach(new Consumer<String>() {
            public void accept(String s) {
                System.out.println("consumer接口遍历方案：" + s);
            }
        });
        //支持forEach方法：遍历集合元素【Consumer 匿名内部类】
        //编写Lambda表达式写法
        list.forEach(s -> {
        });
    }

    @Test
    public void testMap() {
        //创建Map集合
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "唐山");
        map.put(2, "石家庄");
        map.put(3, "秦皇岛");
        map.put(4, "邯郸");
        //遍历集合：普通for、增强for、forEach（BiConSummer接口--匿名内部类）
        //键值对-->一组Entry对象
        //BiConSummer接口----获取每组Entry对象---accept（）获取Entry对象
        map.forEach(new BiConsumer<Integer, String>() {
            public void accept(Integer integer, String s) {
                System.out.println("键：" + integer + "值" + s);
            }
        });

        //使用Lambda表达式
        map.forEach((i, s) -> System.out.println("lambda键" + s));
    }

    /**
     * 作业：1.使用Lambda表达式完成 Thread线程创建
     * 2.使用Lambda表达式完成 Runnable线程创建
     * 3.IO流--File类：listFile（FileFilter接口）【5行代码】
     * 目标：【io包下FilterAPI】实现使用Lambda表达式完成
     * 4.IO流--File类：listFile（FileFilter接口）【2行代码】
     * 目标：【io包下FilterAPI】实现使用Lambda表达式完成
     * 5.集合：改成Lambda写法
     * 目标：【list包下ListAPI类下单元测试：testComparator（）】
     * LambdaDemo类下--完成作业
     *
     * @LambdaHomeWork1
     * @LambdaHomeWork2 提交  11/8 中午12点前
     */

    @Test
    public void LambdaHomeWork1() {
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                System.out.println("给我学的啊，One楞One楞的~");
            }
        });
        t1.start();
    }

    @Test
     public void LambdaHomeWork2() {
        Runnable mr1 = () -> {
            for (int i = 0; i < 1000; i++) {
                System.out.println("时间不等人，但我等你");
            }
        };
        Thread t2 = new Thread(mr1);
        t2.start();
    }

    @Test
    public void LambdaHomeWork3() {
         File  file =  new File("." + File.separator);
        FileFilter FF =  (pathname) ->
                  pathname.getName().startsWith("s");
        File[] subs  =  file.listFiles(FF);
        for (int i = 0; i < subs.length; i++) {
            System.out.println("所有文件和文件夹的名：" + subs[i]);
        }
    }

       @Test
    public  void LambdaHomeWork4() {
        for (File f :  new File("." + File.separator).listFiles((pathname) -> {
            return  pathname.getName().startsWith("s");}))  {System.out.println("过滤出来文件夹名字是：" + f);
        }
    }
    @Test
    public void LambdaHomeWork5(){

    }
}